home *** CD-ROM | disk | FTP | other *** search
Wrap
VERSION 2.00 Begin Form UndoMe Caption = "Undo Me" ClientHeight = 3510 ClientLeft = 1455 ClientTop = 2310 ClientWidth = 6210 Height = 4200 Icon = EDITUNDO.FRX:0000 Left = 1395 LinkMode = 1 'Source LinkTopic = "Form1" ScaleHeight = 3510 ScaleWidth = 6210 Top = 1680 Width = 6330 Begin TextBox Text1 Height = 1455 Left = 240 MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 0 Text = "Hello World" Top = 120 Width = 3015 End Begin TextBox Text2 Height = 1455 Left = 3240 MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 1 Text = "Goodbye World" Top = 120 Width = 2895 End Begin PictureBox Picture1 AutoRedraw = -1 'True Height = 1575 Left = 120 Picture = EDITUNDO.FRX:0302 ScaleHeight = 1545 ScaleWidth = 4065 TabIndex = 2 Top = 1680 Width = 4095 End Begin ComboBox Combo1 Height = 1500 Left = 4320 Style = 1 'Simple Combo TabIndex = 4 Text = "Combo1" Top = 1680 Width = 1815 End Begin PictureBox TrashPic Height = 375 Left = 120 ScaleHeight = 345 ScaleWidth = 1065 TabIndex = 3 Top = 3000 Visible = 0 'False Width = 1095 End Begin Menu mBar Caption = "&File" Index = 0 Begin Menu mFile Caption = "&New" Enabled = 0 'False Index = 0 End Begin Menu mFile Caption = "&Open..." Enabled = 0 'False Index = 1 End Begin Menu mFile Caption = "&Close" Enabled = 0 'False Index = 2 End Begin Menu mFile Caption = "&Save" Enabled = 0 'False Index = 3 End Begin Menu mFile Caption = "Save &As..." Enabled = 0 'False Index = 4 End Begin Menu mFile Index = 5 End Begin Menu mFile Caption = "&Print" Enabled = 0 'False Index = 6 End Begin Menu mFile Caption = "P&rinter Setup" Enabled = 0 'False Index = 7 End Begin Menu mFile Index = 8 End Begin Menu mFile Caption = "E&xit" Index = 9 End End Begin Menu mBar Caption = "&Edit" Index = 1 Begin Menu mEdit Caption = "&Undo Alt+Backspace" Enabled = 0 'False Index = 0 End Begin Menu mEdit Index = 1 End Begin Menu mEdit Caption = "Cu&t Shift+Del" Enabled = 0 'False Index = 2 End Begin Menu mEdit Caption = "&Copy Ctrl+Ins" Index = 3 End Begin Menu mEdit Caption = "&Paste Shift+Ins" Index = 4 End Begin Menu mEdit Caption = "Paste &Link" Enabled = 0 'False Index = 5 End Begin Menu mEdit Caption = "&Delete Del" Index = 6 End Begin Menu mEdit Caption = "Select &All" Index = 7 End Begin Menu mEdit Index = 8 End Begin Menu mEdit Caption = "Clea&r" Index = 9 End End Begin Menu mBar Caption = "&Help" Index = 2 Begin Menu mHelp Caption = "&Index" Enabled = 0 'False Index = 0 End Begin Menu mHelp Caption = "&Keyboard" Enabled = 0 'False Index = 1 End Begin Menu mHelp Caption = "Using &Help" Enabled = 0 'False Index = 2 End Begin Menu mHelp Caption = "&About..." Index = 3 End End Option Explicit Declare Function SendMessage Lib "User" (ByVal hwnd%, ByVal msg%, ByVal wp%, lp As Any) As Integer Declare Function GetFocus Lib "User" () As Integer ' Windows Messages Const WM_USER = &H400 Const EM_CANUNDO = WM_USER + 22 Const EM_UNDO = WM_USER + 23 Const WM_CUT = &H300 Const WM_COPY = &H301 Const WM_PASTE = &H302 Const WM_UNDO = &H304 ' Clipboard Formats Const CF_TEXT = 1 Const CF_BITMAP = 2 Const CF_METAFILE = 3 Const CF_DIB = 8 Const CF_LINK = &HBF00 ' Menu Item Control Array Indexes Const NEW_INDEX = 0 Const OPEN_INDEX = 1 Const CLOSE_INDEX = 2 Const SAVE_INDEX = 3 Const SAVEAS_INDEX = 4 Const PRINT_INDEX = 6 Const PRINTERSETUP_INDEX = 7 Const EXIT_INDEX = 9 Const UNDO_INDEX = 0 Const CUT_INDEX = 2 Const COPY_INDEX = 3 Const PASTE_INDEX = 4 Const PASTELINK_INDEX = 5 Const DEL_INDEX = 6 Const SELECTALL_INDEX = 7 Const CLEAR_INDEX = 9 Const INDEX_INDEX = 0 Const KB_INDEX = 1 Const USING_INDEX = 2 Const ABOUT_INDEX = 3 Sub CopyPic (Pic As Control) On Error Resume Next Clipboard.Clear Clipboard.SetData Pic.Picture, CF_METAFILE Clipboard.SetData Pic.Picture, CF_DIB Clipboard.SetData Pic.Picture, CF_BITMAP Exit Sub End Sub Sub Form_Load () Dim i As Integer For i = 65 To 90 combo1.AddItem String$(12, i) Next i UndoMe.Visible = False UndoMe.Height = 3500 UndoMe.Width = 5000 UndoMe.Visible = True End Sub Sub Form_Resize () Const borderWidth = 100 Const VertPercent = .5 Const HorzPercent = .7 text1.Move UndoMe.ScaleLeft + borderWidth, UndoMe.ScaleTop + borderWidth text1.Height = (UndoMe.ScaleHeight * VertPercent) - (borderWidth * 2) text1.Width = ((UndoMe.ScaleWidth) / 2) - (borderWidth * 2) text2.Move ((UndoMe.ScaleWidth) / 2) + borderWidth, UndoMe.ScaleTop + borderWidth text2.Height = (UndoMe.ScaleHeight * VertPercent) - (borderWidth * 2) text2.Width = ((UndoMe.ScaleWidth) / 2) - (borderWidth * 2) Picture1.Move UndoMe.ScaleLeft + borderWidth, (UndoMe.ScaleTop + (UndoMe.ScaleHeight * VertPercent)) + borderWidth Picture1.Height = (UndoMe.ScaleHeight * (1 - VertPercent)) - (borderWidth * 2) Picture1.Width = ((UndoMe.ScaleWidth) * HorzPercent) - (borderWidth * 2) combo1.Move ((UndoMe.ScaleWidth) * HorzPercent) + borderWidth, (UndoMe.ScaleTop + (UndoMe.ScaleHeight * (1 - VertPercent))) + borderWidth combo1.Height = (UndoMe.ScaleHeight * (1 - VertPercent)) - (borderWidth * 2) combo1.Width = ((UndoMe.ScaleWidth) * (1 - HorzPercent)) - (borderWidth * 2) End Sub Sub mBar_Click (Index As Integer) ' This handles the main menu bar item functions ' In reality, the only main menu items which needs ' attention is the Edit menu so we can en/disable the ' Edit menu items appropriately. If Index = 1 Then ' Edit Menu 'Enable / disable Undo If TypeOf Screen.ActiveControl Is TextBox Then mEdit(UNDO_INDEX).Enabled = SendMessage(GetFocus(), EM_CANUNDO, 0, ByVal 0&) ElseIf TypeOf Screen.ActiveControl Is PictureBox Then mEdit(UNDO_INDEX).Enabled = (Val(TrashPic.Tag) = GetFocus()) Else mEdit(UNDO_INDEX).Enabled = False 'No way to find out if a combo box can be undone. 'Can use EM_CANUNDO in Win 3.0, but that RIPs in Win 3.1 End If 'As a pretty feature, change Undo to can't undo if we can't If Not mEdit(UNDO_INDEX).Enabled Then mEdit(UNDO_INDEX).Caption = "Can't Undo" Else mEdit(UNDO_INDEX).Caption = "&Undo Alt+Backspace" End If 'Enable / disable Cut & Copy & SelectAll & Del If TypeOf Screen.ActiveControl Is TextBox Then mEdit(CUT_INDEX).Enabled = (Screen.ActiveControl.SelText <> "") mEdit(COPY_INDEX).Enabled = (Screen.ActiveControl.SelText <> "") mEdit(SELECTALL_INDEX).Enabled = Len(Screen.ActiveControl.Text) mEdit(DEL_INDEX).Enabled = (Screen.ActiveControl.SelText <> "") ElseIf TypeOf Screen.ActiveControl Is ComboBox Then mEdit(CUT_INDEX).Enabled = (Screen.ActiveControl.SelText <> "") mEdit(COPY_INDEX).Enabled = (Screen.ActiveControl.SelText <> "") mEdit(SELECTALL_INDEX).Enabled = False mEdit(DEL_INDEX).Enabled = (Screen.ActiveControl.SelText <> "") ElseIf TypeOf Screen.ActiveControl Is PictureBox Then mEdit(CUT_INDEX).Enabled = True mEdit(COPY_INDEX).Enabled = True mEdit(SELECTALL_INDEX).Enabled = False mEdit(DEL_INDEX).Enabled = False Else mEdit(CUT_INDEX).Enabled = False mEdit(COPY_INDEX).Enabled = False mEdit(SELECTALL_INDEX).Enabled = False mEdit(DEL_INDEX).Enabled = False End If 'Enable / disable Paste If TypeOf Screen.ActiveControl Is TextBox Then mEdit(PASTE_INDEX).Enabled = Clipboard.GetFormat(CF_TEXT) ElseIf TypeOf Screen.ActiveControl Is ComboBox Then mEdit(PASTE_INDEX).Enabled = Clipboard.GetFormat(CF_TEXT) ElseIf TypeOf Screen.ActiveControl Is PictureBox Then mEdit(PASTE_INDEX).Enabled = Clipboard.GetFormat(CF_DIB) Or Clipboard.GetFormat(CF_BITMAP) Or Clipboard.GetFormat(CF_METAFILE) Else mEdit(PASTE_INDEX).Enabled = False End If 'Enable / disable Paste Link If TypeOf Screen.ActiveControl Is TextBox Then mEdit(PASTELINK_INDEX).Enabled = Clipboard.GetFormat(CF_LINK) ElseIf TypeOf Screen.ActiveControl Is Label Then mEdit(PASTELINK_INDEX).Enabled = Clipboard.GetFormat(CF_LINK) ElseIf TypeOf Screen.ActiveControl Is PictureBox Then mEdit(PASTELINK_INDEX).Enabled = Clipboard.GetFormat(CF_LINK) Else mEdit(PASTELINK_INDEX).Enabled = False End If 'Enable / disable Clear mEdit(CLEAR_INDEX).Enabled = Clipboard.GetFormat(CF_LINK) Or Clipboard.GetFormat(CF_TEXT) Or Clipboard.GetFormat(CF_DIB) Or Clipboard.GetFormat(CF_BITMAP) Or Clipboard.GetFormat(CF_METAFILE) End If End Sub Sub mEdit_Click (Index As Integer) Dim rc As Integer, pos As Integer Dim pastelink As String 'This handles all the Edit Menu Items... Select Case Index Case UNDO_INDEX If TypeOf Screen.ActiveControl Is TextBox Then rc = SendMessage(GetFocus(), WM_UNDO, 0, ByVal 0&) ElseIf TypeOf Screen.ActiveControl Is ComboBox Then rc = SendMessage(GetFocus(), WM_UNDO, 0, ByVal 0&) ElseIf TypeOf Screen.ActiveControl Is PictureBox Then Screen.ActiveControl.Picture = TrashPic.Picture TrashPic.Picture = LoadPicture() TrashPic.Tag = "" End If Case CUT_INDEX, COPY_INDEX If TypeOf Screen.ActiveControl Is TextBox Then If Index = CUT_INDEX Then rc = SendMessage(GetFocus(), WM_CUT, 0, ByVal 0&) Else ' must be Copy rc = SendMessage(GetFocus(), WM_COPY, 0, ByVal 0&) End If ElseIf TypeOf Screen.ActiveControl Is ComboBox Then If Index = CUT_INDEX Then rc = SendMessage(GetFocus(), WM_CUT, 0, ByVal 0&) Else rc = SendMessage(GetFocus(), WM_COPY, 0, ByVal 0&) End If ElseIf TypeOf Screen.ActiveControl Is PictureBox Then CopyPic Screen.ActiveControl If Index = CUT_INDEX Then TrashPic.Picture = Screen.ActiveControl.Picture TrashPic.Tag = Str$(GetFocus()) Screen.ActiveControl.Picture = LoadPicture() End If End If Case PASTE_INDEX If TypeOf Screen.ActiveControl Is TextBox Then rc = SendMessage(GetFocus(), WM_PASTE, 0, ByVal 0&) ElseIf TypeOf Screen.ActiveControl Is ComboBox Then rc = SendMessage(GetFocus(), WM_PASTE, 0, ByVal 0&) ElseIf TypeOf Screen.ActiveControl Is PictureBox Then TrashPic.Picture = Screen.ActiveControl.Picture TrashPic.Tag = Str$(GetFocus()) PastePic Screen.ActiveControl End If Case PASTELINK_INDEX pastelink = Clipboard.GetText(&HBF00) pos = InStr(pastelink, "!") If pos > 0 Then Screen.ActiveControl.LinkMode = 0 Screen.ActiveControl.LinkTopic = Left$(pastelink, pos - 1) Screen.ActiveControl.LinkItem = Mid$(pastelink, pos + 1) Screen.ActiveControl.LinkMode = 1 Else Beep End If Case DEL_INDEX If TypeOf Screen.ActiveControl Is TextBox Then Screen.ActiveControl.SelText = "" ElseIf TypeOf Screen.ActiveControl Is ComboBox Then Screen.ActiveControl.SelText = "" ElseIf TypeOf Screen.ActiveControl Is PictureBox Then Screen.ActiveControl.Picture = LoadPicture() End If Case SELECTALL_INDEX If TypeOf Screen.ActiveControl Is TextBox Then Screen.ActiveControl.SelStart = 0 Screen.ActiveControl.SelLength = Len(Screen.ActiveControl.Text) End If Case CLEAR_INDEX Clipboard.Clear End Select End Sub Sub mFile_Click (Index As Integer) Select Case Index Case NEW_INDEX Case OPEN_INDEX Case CLOSE_INDEX Case SAVE_INDEX Case SAVEAS_INDEX Case PRINT_INDEX Case PRINTERSETUP_INDEX Case EXIT_INDEX End End Select End Sub Sub mHelp_Click (Index As Integer) Select Case Index Case INDEX_INDEX Case KB_INDEX Case USING_INDEX Case ABOUT_INDEX MsgBox "Cut and Paste with Undo Demo" + Chr$(13) + " Version 0.3" + Chr$(13) + " By: Jeff Littrell", 64, "About" End Select End Sub Sub PastePic (Pic As Control) If Clipboard.GetFormat(CF_METAFILE) Then Pic.Picture = Clipboard.GetData(CF_METAFILE) ElseIf Clipboard.GetFormat(CF_DIB) Then Pic.Picture = Clipboard.GetData(CF_DIB) ElseIf Clipboard.GetFormat(CF_BITMAP) Then Pic.Picture = Clipboard.GetData(CF_BITMAP) End If End Sub